//
//
//class Solution {
//    public int largestRectangleArea(int[] heights) {
//        // 找左边第一个比他小的下标left，右边第一个比他小的下标right
//        // 面积 = (right - left) * nums[i]
//        // 升序
//        Stack<Integer> stack = new Stack<>();
//        List<Integer> arr = new ArrayList<>();
//        arr.add(0);
//        for (int x : heights) {
//            arr.add(x);
//        }
//        arr.add(0);
//        int maxArea = 0;
//        for (int i = 0; i < arr.size(); i++) {
//            int cur = arr.get(i);
//            while (!stack.isEmpty() && arr.get(stack.peek()) > arr.get(i)) {
//                int top = stack.pop();
//                int min = stack.peek();
//                int max = i;
//                maxArea = Math.max(maxArea, (max - min - 1) * arr.get(top));
//            }
//            stack.push(i);
//        }
//        return maxArea;
//
//    }
//}